#include <cstdio>

const int N = 100005, mod = 1e9 + 7;
int n, m, top, lbrc, rbrc, f[2005][2005], g[2005][2005];
char s[N];

int main() {
#ifndef ONLINE_JUDGE
#ifdef LOCAL
  freopen("testdata.in", "r", stdin);
  freopen("testdata.out", "w", stdout);
#else
  freopen("bracket.in", "r", stdin);
  freopen("bracket.out", "w", stdout);
#endif
#endif

  scanf("%d%d", &n, &m);
  scanf("%s", s + 1);
  for (int i = 1; i <= m; ++i) {
    if (s[i] == '(')
      ++top;
    else {
      if (top)
        --top;
      else
        ++rbrc;
    }
  }
  lbrc = top;
  if (n == m && lbrc == 0 && rbrc == 0) return putchar('1'), 0;
  f[0][0] = 1;
  for (int i = 1; i <= n - m; ++i) {
    for (int j = 0; j <= n - m - lbrc; ++j) {
      if (j > 0) f[i][j] += f[i - 1][j - 1];
      f[i][j] %= mod;
      f[i][j] += f[i - 1][j + 1];
      f[i][j] %= mod;
    }
  }
  int ans = 0;
  for (int i = rbrc, end; i <= n - m - lbrc; ++i) {
    end = n - m - i + rbrc - lbrc;
    for (int j = rbrc; j <= end; ++j)
      (ans += 1ll * f[i][j] * f[n - m - i][j - rbrc + lbrc] % mod) %= mod;
  }
  printf("%d", ans);
  return 0;
}